package model;

import interfaz.IAtributoCompuesto;

import java.util.ArrayList;
import java.util.List;

public class AtributoCompuesto implements IAtributoCompuesto{
	
	private String nombre,tipoDeDato,tipo,cardinalidad,composicion;
	private boolean esPK,esFK;
	private List<Atributo> listaAtributos;
	private List<AtributoCompuesto> listaAtributosCompuestos;
	private int cantidadAtibutosCompuestosAnidados;
	
	public AtributoCompuesto(String nombre, String tipo,String tipoDeDato,String cardinalidad,String composicion, String identificador){
		this.listaAtributos = new ArrayList<Atributo>();
		this.nombre = nombre;
		this.tipo = tipo;
		this.cardinalidad = cardinalidad;
		this.composicion = composicion;
		this.tipoDeDato = tipoDeDato;

		if( identificador.equals("Interno")){
			this.esPK = true;
		}
		else if(identificador.equals("Externo")){
			this.esFK = true;
		}
		else if(identificador.equals("Mixto")){
			this.esPK = true;
			this.esFK = true;
		}
	}
	
	public String getCardinalidad() {
		return cardinalidad;
	}

	//TODO: Creado para que compile Prueba.java se debe eliminar cuando probemos todo en conjunto.
	public AtributoCompuesto(String nombre){
		this.listaAtributos = new ArrayList<Atributo>();
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getNombre() {
		return nombre;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	
	public List<Atributo> getListaAtributos() {
		return listaAtributos;
	}
	
	public List<AtributoCompuesto> getListaAtributosCompuestos() {
		if(this.listaAtributosCompuestos == null){
			this.crearListaDeAtributosCompuestos();
		}
		return listaAtributosCompuestos;
		
	}
	
	/**
	 * Se debe inicializar la lista de atributos compuestos fuera del constructor para que todos aquellos que no lo tengan no lo visualicen en el archivo xml.
	 */
	public void crearListaDeAtributosCompuestos(){
		listaAtributosCompuestos = new ArrayList<AtributoCompuesto>();
	}


	public void setEsPK(boolean esPK) {
		this.esPK = esPK;
	}

	public boolean getEsPK() {
		return esPK;
	}

	public int getCantidadAtibutosCompuestosAnidados() {
		
		if(!this.listaAtributosCompuestos.isEmpty()){
			cantidadAtibutosCompuestosAnidados = this.listaAtributosCompuestos.size();
		}
		
		return cantidadAtibutosCompuestosAnidados;
	}
	
	public boolean getEsFK() {
		return esFK;
	}

	

}
